package com.atguigu.gmall.web.controller;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.product.client.ProductFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

/**
 * @author: atguigu
 * @create: 2023-09-08 11:48
 */
@Controller
public class IndexHtmlController {

    @Autowired
    private ProductFeignClient productFeignClient;

    /**
     * 渲染门户首页
     *
     * @param model
     * @return
     */
    @GetMapping({"/", "/index.html"})
    public String indexHtml(Model model) {
        //1.TODO 首页中间轮播图广告
        //2.TODO 秒杀商品列表（部分）-直接从Redis中排行榜Zset数据类型中获取
        //3.TODO 频道广场（购买商品入口）
        //4.TODO 推荐商品列表
        //5.TODO 热点商品关键词
        //6.商城分类数据（一、二、三级分类） 如果存在多项业务数据远程获取，采用CompletableFuture+线程池优化 为并行
        List<JSONObject> list = productFeignClient.getBaseCategoryList();
        model.addAttribute("list", list);
        return "/index/index";
    }


    @Autowired
    private TemplateEngine templateEngine;


    /**
     * 将首页进行保存html文件到磁盘
     */
    @GetMapping("createIndexHtml")
    @ResponseBody
    public void createIndexHtml() {
        List<JSONObject> list = productFeignClient.getBaseCategoryList();
        //1.模板文件名称
        String indexName = "/index/index";
        //2.封装模板所属数据
        Context context = new Context();
        context.setVariable("list", list);
        //3.写文件对象
        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter("D:\\tmp\\index.html");
            //x.将模板业务所需要数据跟模板进行合并产生html文件，将文件保存--
            templateEngine.process(indexName, context, fileWriter);
            fileWriter.close();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
